<?php
App::uses('AppController', 'Controller');

/**
 * Maneja la información a mostrar el la página de inicio
 * 
 * @author vcanizares
 */
class EspecieController extends AppController {
	
	/**
	 * Nombre del controlador
	 */
	public $name = 'Especie';
	
	/**
	 * Constantes
	 */
	const ID_OPCION_MENU = 6;
	
	/**
	 * Componentes
	 */
	public $components = array('Menu');
	
	/**
	 * Helpers
	 */
	public $helpers = array('AoaTable','AoaText','Especie','ClaseEdadSexo','Observador','Js','ListaAb');
	
	/**
	 * Modelos
	 */
	public $uses = array('Especie', 'OrdenTaxonomico', 'Cita', 'AsoCitaObservador', 'AsoCitaClaseEdadSexo', 'Municipio', 'Lugar', 'CuadriculaUtm', 'Familia', 'ProteccionLr', 'ProteccionClm', 'EstatusCuantitativoAb', 'DistribucionAb');
	
	/**
	 * Función que se ejecuta al carga la página inicial
	 */
	public function index() {
		
		// Generamos la opciones de menu
		$opciones_menu_superior = $this -> Menu -> generarItemsMenu($this::ID_OPCION_MENU);
		$this->set('opciones_menu_superior', $opciones_menu_superior);
	}
	
	/**
	 * Función que se ejecuta al carga la página inicial
	 */
	public function detalle() {
		
		// Generamos la opciones de menu
		$opciones_menu_superior = $this -> Menu -> generarItemsMenu($this::ID_OPCION_MENU);
		$this->set('opciones_menu_superior', $opciones_menu_superior);
		
		// Recogemos los parámetros de la request
		$id_especie = $this->request->named['id'];
		
		// Contendra todas las fotos asociadas a las citas de la especie
		$fotos = array();
		
		/*
		 * Datos generales de la especie
		 */ 
		$especie = $this->Especie->find(
			'first', 
			array(
				'conditions'=>array('Especie.id'=>$id_especie)
			)
		);
		
		/*
		 * Orden taxonomico
		 */
		$orden_taxonomico = $this -> OrdenTaxonomico -> find(
			'first', 
			array(
				'conditions'=>array('OrdenTaxonomico.id'=>$especie['Familia']['orden_taxonomico_id'])
			)
		);
		$especie['OrdenTaxonomico'] = $orden_taxonomico['OrdenTaxonomico'];
		
		/*
		 * Citas
		 */
		$citas = $this -> Cita -> find(
			'all', 
			array(
				'conditions'=>array('Cita.especie_id'=>$especie['Especie']['id'])
			)
		);
		for ($index = 0 ; $index < count($citas) ; $index++) {
			
			/*
			 * Observadores
			 */
			$observadores = $this -> AsoCitaObservador -> find(
				'all', 
				array(
					'conditions'=>array('AsoCitaObservador.cita_id'=>$citas[$index]['Cita']['id'])
				)
			);
			$citas[$index]['observadores'] = $observadores;
			
			/*
			 * Clases edad sexo
			 */
			$clases_edad_sexo = $this -> AsoCitaClaseEdadSexo -> find(
				'all', 
				array(
					'conditions'=>array('AsoCitaClaseEdadSexo.cita_id'=>$citas[$index]['Cita']['id'])
				)
			);
			$citas[$index]['clases_edad_sexo'] = $clases_edad_sexo;
			
			/*
			 * Fotos
			 */
			if(count($citas[$index]['Fichero']) > 0) {
				$fotos = array_merge($fotos, $citas[$index]['Fichero']);				
			}
		}
		$especie['Citas'] = $citas;
		$especie['Fotos'] = $fotos;
		
		$this->set('especie', $especie);
		
		/**
		 * Ubicaciones
		 */
		/*
		 * Municipios
		 */
		$municipios = $this -> Municipio -> obtenerMunicipiosActivosOrdenadosPorNombre();
		$this->set('municipios', $municipios);
			
		/*
		 * Lugares
		 */
		$lugares = $this -> Lugar -> obtenerLugaresActivosOrdenadosPorNombre();
		$this->set('lugares', $lugares);
		
		/*
		 * UTM
		 */
		$cuadriculas_utm = $this -> CuadriculaUtm -> obtenerCuadriculasUtmActivosOrdenadosPorNombre();
		$this->set('cuadriculas_utm', $cuadriculas_utm);
		
		/**
		 * Total aves/periodo
		 */
		/*
		 * Años
		 */
		$anios = $this -> Cita -> obtenerAniosCitas();
		$this->set('anios', $anios);
	}
	
	/**
	 * Función que se ejecuta al carga la página inicial
	 */
	public function lista_ab() {
		
		// Generamos la opciones de menu
		$opciones_menu_superior = $this -> Menu -> generarItemsMenu($this::ID_OPCION_MENU);
		$this->set('opciones_menu_superior', $opciones_menu_superior);
		
		/*
		 * Especies citadas en Albacete agrupadas por familia
		 */ 
		$familias = $this->Familia->find(
			'all', 
			array(
				'fields' => array('Familia.id', 'Familia.nombre'),
				'recursive'=>-1
			)
		);
		
		foreach ($familias as $familia) {
			
			$especies_ab_por_familia = $this->Especie->find(
				'all', 
				array(
					'conditions'=>array('Especie.familia_id'=>$familia['Familia']['id'], 'Especie.indCitadaAlbacete'=>1)
				)
			);
			
			if(count($especies_ab_por_familia) > 0) {
				$especies_ab[$familia['Familia']['nombre']] = $especies_ab_por_familia;
			}
		}
		
		$this->set('especies_ab', $especies_ab);
		
		/*
		 * Info (Estatus nacional, nivel proteccion LR, nivel protección CLM, Estatus provincial Ab, Distribucion provincial Ab)
		 */
		$info = array();
		
		// Proteccion LR
		$info['ProteccionLr'] = $this -> ProteccionLr -> obtenerActivos();
		
		// Proteccion CLM
		$info['ProteccionClm'] = $this -> ProteccionClm -> obtenerActivos();
		
		// Estatus Cuantitativo AB
		$info['EstatusCuantitativoAb'] = $this -> EstatusCuantitativoAb -> obtenerActivos();
		
		// Distribucion AB
		$info['DistribucionAb'] = $this -> DistribucionAb -> obtenerActivos();
		
		$this->set('info', $info);
	}
	
	/**
	 * Genera un gráfico de barras a partir de los datos recibidos del formulario de la sección de estadísticas
	 */
	public function generar_grafico() {
		
		$this->layout = 'ajax';
		
		$validate = true;
		
		$citas_grafico = array(0,0,0,0,0,0,0,0,0,0,0,0);
		$title = "";
		
		$especie_id = $this->request->params['named']['especie_id'];
		
		$numeroDe = $this->request->data['numeroDe'];
		$zonaGeografica = $this->request->data['zonaGeografica'];
		$periodo = $this->request->data['periodo'];
		
		/*
		 * Numero de
		 */
		if($numeroDe == "aves") {
			$selectField = "SUM(Cita.cantidad)";
		}
		else if($numeroDe == "citas") {
			$selectField = "COUNT(Cita.id)";
		}
		
		/*
		 * Zona geográfica
		 */ 
		if(isset($this->request->data['municipios'])) {
			$municipio_id = $this->request->data['municipios'];
			
			// Obtenemos el nombre del municipio
			$this->Municipio->id = $municipio_id;
			$municipio_nombre = $this->Municipio->field("nombre");
		}
		if(isset($this->request->data['lugares'])) {
			$lugar_id = $this->request->data['lugares'];
			
			// Obtenemos el nombre del lugar
			$this->Lugar->id = $lugar_id;
			$lugar_nombre = $this->Lugar->field("nombre");
		}
		if(isset($this->request->data['cuadriculas_utm'])) {
			$cuadricula_utm_id = $this->request->data['cuadriculas_utm'];
			
			// Obtenemos el código de la cuadrícula UTM
			$this->CuadriculaUtm->id = $cuadricula_utm_id;
			$cuadricula_utm_codigo = $this->CuadriculaUtm->field("codigo");
		}
		
		/*
		 * Periodos
		 */ 
		if(isset($this->request->data['anio'])) {
			$anio = $this->request->data['anio'];
		}
		if(isset($this->request->data['anioDesde']) && isset($this->request->data['anioHasta'])) {
			$anio_desde = $this->request->data['anioDesde'];
			$anio_hasta = $this->request->data['anioHasta'];
		}
		if(isset($this->request->data['fechaDesde']) && isset($this->request->data['fechaHasta'])) {
			$fecha_desde = $this->request->data['fechaDesde'];
			$fecha_hasta = $this->request->data['fechaHasta'];
		}
		
		if($validate) {
			if($zonaGeografica == 'provincia') {
				if($periodo == "anio") {
					$title = "Nº de $numeroDe durante el año $anio en la provincia de Albacete";
					$citas_grafico = $this -> Cita -> obtenerCitasProvincialesPorAnio($especie_id, $anio, $selectField);
				}
				else if ($periodo == "fechas") {
					$title = "Nº de $numeroDe desde el $fecha_desde hasta el $fecha_hasta \n en la provincia de Albacete";
					$citas_grafico = $this -> Cita -> obtenerCitasProvincialesPorIntervaloFechas($especie_id, $fecha_desde, $fecha_hasta, $selectField);
				}
				else if ($periodo == "anios") {
					$title = "Nº de $numeroDe desde $anio_desde hasta $anio_hasta en la provincia de Albacete";
					$citas_grafico = $this -> Cita -> obtenerCitasProvincialesPorIntervaloAnios($especie_id, $anio_desde, $anio_hasta, $selectField);
				}
			}
			else {
				if($zonaGeografica == 'municipio') {
					if($periodo == "anio") {
						$title = "Nº de $numeroDe durante el año $anio en el municipio de $municipio_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorMunicipioYAnio($especie_id, $municipio_id, $anio, $selectField);
					}
					else if ($periodo == "fechas") {
						$title = "Nº de $numeroDe desde el $fecha_desde hasta el $fecha_hasta \n en el municipio de $municipio_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorMunicipioIntervaloFecha($especie_id, $municipio_id, $fecha_desde, $fecha_hasta, $selectField);
					}
					else if ($periodo == "anios") {
						$title = "Nº de $numeroDe desde $anio_desde hasta $anio_hasta en el municipio de $municipio_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorMunicipioIntervaloAnios($especie_id, $municipio_id, $anio_desde, $anio_hasta, $selectField);
					}
				}
				else if($zonaGeografica == 'lugar') {
					if($periodo == "anio") {
						$title = "Nº de $numeroDe durante el año $anio en $lugar_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorLugarYAnio($especie_id, $lugar_id, $anio, $selectField);
					}
					else if ($periodo == "fechas") {
						$title = "Nº de $numeroDe desde el $fecha_desde hasta el $fecha_hasta \n en $lugar_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorLugarIntervaloFechas($especie_id, $lugar_id, $fecha_desde, $fecha_hasta, $selectField);
					}
					else if ($periodo == "anios") {
						$title = "Nº de $numeroDe desde $anio_desde hasta $anio_hasta en $lugar_nombre";
						$citas_grafico = $this -> Cita -> obtenerCitasPorLugarIntervaloAnios($especie_id, $lugar_id, $anio_desde, $anio_hasta, $selectField);
					}
				}
				else if ($zonaGeografica == 'cuadriculaUtm') {
					if($periodo == "anio") {
						$title = "Nº de $numeroDe durante el año $anio en la cuadrícula UTM $cuadricula_utm_codigo";
						$citas_grafico = $this -> Cita -> obtenerCitasPorCuadriculaUtmYAnio($especie_id, $cuadricula_utm_id, $anio, $selectField);
					}
					else if ($periodo == "fechas") {
						$title = "Nº de $numeroDe desde el $fecha_desde hasta el $fecha_hasta \n en la cuadrícula UTM $cuadricula_utm_codigo";
						$citas_grafico = $this -> Cita -> obtenerCitasPorCuadriculaUtmYPeriodo($especie_id, $cuadricula_utm_id, $fecha_desde, $fecha_hasta, $selectField);
					}
					else if ($periodo == "anios") {
						$title = "Nº de $numeroDe desde $anio_desde hasta $anio_hasta en la cuadrícula UTM $cuadricula_utm_codigo";
						$citas_grafico = $this -> Cita -> obtenerCitasPorCuadriculaUtmYMes($especie_id, $cuadricula_utm_id, $anio_desde, $anio_hasta, $selectField);
					}
				}
			}
		}
		
		$this->set('title', $title);
		$this->set('ydata_ajax', $citas_grafico);
	}
	
	/**
	 * Genera un mapa de distribuciones a partir de los datos recibidos del formulario de la sección de estadísticas
	 */
	public function generar_mapa() {
		
		$this->layout = 'ajax';
		
		$especie_id = $this->request->params['named']['especie_id'];
		
		$divisionGeografica = $this->request->data['divisionGeografica'];
		$tipoDistribucion = $this->request->data['tipoDistribucion'];
		
		$citas_mapa = array();
		$title = "";
		
		if($divisionGeografica == "porMunicipio") {
			
			if($tipoDistribucion == "geografica") {
				$title ="Distribución de citas por municipios";
				$citas_mapa = $this -> Cita -> obtenerTotalCitasPorMunicipio($especie_id);
			}
			else if($tipoDistribucion == "cuantitativa") {
				$title ="Distribución de número de citas por municipios";
				$citas_mapa = $this -> Cita -> obtenerTotalCitasPorMunicipio($especie_id);
			}
			else if($tipoDistribucion == "categoriaReproduccion") {
				$title ="Distribución de categorías de reproducción por municipios";
				$citas_mapa = $this -> Cita -> obtenerTipoCriaPorMunicipio($especie_id);
			}
		}
		else if($divisionGeografica == "porUtm") {
			
			if($tipoDistribucion == "geografica") {
				$title ="Distribución de citas por cuadrículas UTM";
				$citas_mapa = $this -> Cita -> obtenerTotalCitasPorCuadriculaUtm($especie_id);
			}
			else if($tipoDistribucion == "cuantitativa") {
				$title ="Distribución de número de citas por cuadrículas UTM";
				$citas_mapa = $this -> Cita -> obtenerTotalCitasPorCuadriculaUtm($especie_id);
				
			}
			else if($tipoDistribucion == "categoriaReproduccion") {
				$title ="Distribución de categorías de reproducción por cuadrículas UTM";
				$citas_mapa = $this -> Cita -> obtenerTipoCriaPorCuadriculaUtm($especie_id);
			}
		}
		
		$this->set('citas_mapa', $citas_mapa);
		$this->set('title', $title);
	}
}
?>